## /*******************************************/
## /**************** 机器学习 ******************/
## /*******************************************/

# 机器学习之KNN算法K（K-Nearest Neighbor，K最近邻）
## 鸢尾花数据集机器训练
#首先导入鸢尾花数据载入工具
from sklearn.datasets import load_iris
#导入KNN分类模型
from sklearn.neighbors import KNeighborsClassifier
#为了方便可视化，我们再导入matplotlib和seaborn
import matplotlib.pyplot as plt
import seaborn as sns

#加载鸢尾花数据集，赋值给iris变量
iris = load_iris()
#查看数据集的键名
print(iris.keys())
# target 为目标标签，人为分类，3种类别：0, 1, 2，即鸢尾花分为0,1,2三种类别
print('target：',iris.target)
print('feature_names：',iris.feature_names)
print('target_names：',iris.target_names)
X, y = iris.data, iris.target
print('X.shape',X.shape)

import pandas as pd
# 转换为表格查看
df = pd.DataFrame(X, columns=iris.feature_names)
df['TARGET'] = y  # 添加y列,范围内的X对应不同类型的类型
print(df.head())

#导入数据集拆分工具
from sklearn.model_selection import train_test_split
#将X和y拆分为训练集和验证集
X_train, X_test, y_train, y_test =\
train_test_split(X, y)
#查看拆分情况
print('X_train.shape',X_train.shape)

# 训练模型并评估准确率
# 创建KNN分类器,参数保持默认设置
knn_clf = KNeighborsClassifier()
#使用训练集拟合模型
knn_clf.fit(X_train, y_train)
#查看模型在训练集和验证集中的准确率
print('训练集准确率：%.2f'%knn_clf.score(X_train, y_train))
print('验证集准确率：%.2f'%knn_clf.score(X_test, y_test))
